소프트웨어 공학 - 애자일 프로세스, 스크럼

2019-12-06

애자일 프로세스

출처 : https://ko.wikipedia.org/wiki/%EC%95%A0%EC%9E%90%EC%9D%BC%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EA%B0%9C%EB%B0%9C

아무런 계획이 없는 개발 방법과 계획이 지나치게 많은 개발 방법들 사이에서 타협점을 찾고자 하는 방법론

계획이 없는 방법론의 경우, 앞으로의 일을 예측하기 힘들고 효율적이지 못하다는 점에서 취약점을 가지고 있으며,
계획에 너무 의존하는 경우는 그 형식적인 절차를 따르는데 필요한 시간과 비용을 무시할 수 없으며, 전체적인 개발의 흐름 자체를 느리게 하는 단점

폭포수 모델 또는 나선 모형과 구별되는 가장 큰 차이점은
less document-oriented, 즉 문서를 통한 개발 방법이 아니라,
code-oriented, 실질적인 코딩을 통한 방법론이라는 점

소프트웨어를 포함한 IT의 개발은 경험적 프로세스 제어 모델로 접근할 필요가 있다.
경험적 프로세스 제어 모델은 항상 불확실성을 수반하고 포용하고 있다.
애자일 개발 프로세스는 경험적 프로세스 제어모델로 개발을 관리한다.

스크럼

출처 : https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%81%AC%EB%9F%BC(%EC%95%A0%EC%9E%90%EC%9D%BC%EA%B0%9C%EB%B0%9C_%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4)

일본 히토츠바시 대학의 노나카 이쿠지로와 타케우지 히로타카가 1986년 1~2월 Harvard Business Review에 올린 "The New New Product Developement Game"에서 시작된다.

프로젝트관리를 위한 상호,점진적 개발방법론이며, 애자일 소프트웨어 공학 중의 하나이다.
스크럼(Scrum)은 소프트웨어 개발 프로젝트를 위하여 고안되었지만,
소프트웨어 유지보수 팀이나 일반적인 프로젝트/프로그램 관리에서도 적용될 수 있다.

스크럼은 특정 언어나 방법론에 의존적이지 않으며, 개발 언어는 물론이고 객체지향 언어와도 관련이 없는 넓은 응용 범위의 개발 기법이다.

  • 솔루션에 포함할 기능/개선점에 대한 우선 순위를 부여한다.
  • 개발 주기는 30일 정도로 조절하고 개발 주기마다 실제 동작할 수 있는 결과를 제공하라.
  • 개발 주기마다 적용할 기능이나 개선에 대한 목록을 제공하라.
  • 날마다 15분 정도 회의를 가져라.
  • 항상 팀 단위로 생각하라.
  • 원활한 의사소통을 위하여, 구분 없는 열린 공간을 유지하라.

스크럼의 기반(일본의 조직론에 이론적 기반) - 지식 창조 프로세스를 촉진시키는 5가지 요소

  • 조직의 의도

    • 지식 창조의 목표나 팀을 지탱하는 축
  • 자율성

    • 팀의 멤버에게 자유로운 행동을 인정하는 열린 환경(시스템)
  • 역동적이고 창조적인 카오스

    • 조직 내 외부 간의 역동적인 상호작용을 통한 지식창조 환경
  • 잉여성

    • 의도적으로 조직에 넘쳐나는 여분의 정보
  • 최소 유효 다양성

    • 복잡하고 다양한 환경에 기민하게 대응하기 위해서는 조직 구성원이 가져야 하는 다양성

스크럼이 추구하는 가치

스크럼은 다음의 5가지 가치에 중점을 두어 진행된다.

  • 확약

    • 약속한 것을 확실히 실현하는 것
  • 전념

    • 확약한 것의 실현에 전념하는 것
  • 정직

    • 어떤 것이 자신에게 불리해도 숨기지 않는 것
  • 존중

    • 자신과 다른 사람에게 경의를 표하는 것
  • 용기

    • 팀 구성원 은 자신이 옳은 일을 할 수 있도록 팀원간 갈등과 도전을 통해 작업 할 수있는 용기

스크럼의 진행

스크럼에서는, 30일간의 주기로 실제 동작하는 제품을 만들면서 개발을 진행시킨다.
- 일반적인 권장기간은 30일 이지만, 스크럼 적응도 및 진행 상황에 따라 1주~4주의 유연성을 가진다.

  • 제품 백로그(Product Backlog)

    • 개발할 제품에 대한 요구 사항 목록
  • 스프린트(Sprint)

    • 반복적인 개발 주기 (회사에서 정하는 이터레이션이 개발 주기가 된다. 계획 회의 부터 제품 리뷰가 진행 되는 날짜 까지의 기간이 1스프린트 이다)
  • 스프린트 계획 회의(Sprint Planning Meeting)

    • 스프린트 목표와 스프린트 백로그를 계획하는 회의
  • 스프린트 백로그(Sprint Backlog)

    • 각각의 스프린트 목표에 도달하기 위해 필요한 작업 목록
  • 일일 스크럼 회의(Daily Scrum Meeting)

    • 날마다 진행되는 미팅 (어제 한일, 오늘 할일, 장애 현상 등을 공유)
  • 실행 가능한 제품(shippable product) 개발

    • 스프린트의 결과로써 나오는 실행 가능한 제품

상기 요소들을 아래와 같은 순서에 따라 사용하여 스크럼을 진행시킨다.

  1. 제품에서 요구하는 기능과 우선순위를 제품 백로그로 정한다.
  2. PO가 정한 제품의 우선순위에서 어디까지 작업을 할지 팀과 조율 한다. 조율하여 선정된 제품 백로그가 이번 스프린트의 목표가 된다.
  3. 스프린트 목표를 구현 가능 하도록 팀에서 스프린트 백로그를 작성한 뒤 작업을 할당한다.
  4. 스프린트를 진행하는 동안, 매일 정해진 장소와 시간에 모든 개발 팀원이 참여하는 일일 스크럼 회의를 가진다.
  5. 매회의 스프린트가 종료할 때마다, 스프린트 리뷰 미팅을 통해 만들어진 제품을 학습하고 이해 한다.
  6. 제품의 학습과 이해가 끝나면, 스프린트 회고를 통해 팀의 개발 프로세스에 대한 개선의 시간을 갖는다.
  7. 스프린트 기간 중 다음 스프린트를 준비 하기 위해 PO와 필요 인원이 모여 백로그를 준비하는 시간을 갖는다.

  • 제품 책임자(Product Owner)

    • 제품 백 로그를 정의하여 우선순위를 정해 준다. 제품 책임자는 스프린트 목표와 백로그등의 결정에 있어 중심이 되는 상위 관리자로, 제품 책임자가 독단적으로 목표를 결정하지 않고, 고객과 관리자 및 팀원들이 모여서 목표를 정한다.
  • 스크럼 마스터(ScrumMaster)

    • 프로젝트 관리자(코치), 일반적인 관리를 수행하는 프로젝트 관리자들과는 달리 팀원을 코칭하고 프로젝트의 문제 상황을 해결하는 역할을 함

이런 과정을 거친 뒤, 개발 팀원들이 주도적으로 스프린트 목표를 달성하기 위한 작업을 정해 나가게 된다. 보통, 각 작업들은 4시간에서 16시간 정도 걸리도록 정한다. 물론, 작업을 정하고 할당하는데는 고객이나 제품 책임자와는 상관 없이 팀원 자율로 진행된다. 이와 같은 자율적인 행위를 통해서 팀원들은 의사를 활발하게 주고 받게 되고, 끈끈한 협업체계를 가지게 된다.

애자일 프로세스는 외부로부터의 질서보다는 팀원 스스로가 만들어나가는 자기 조직화를 중요하게 여기고 있다. 하지만, 이러한 부분과 더불어 애자일 프로세스는 무질서해 보이기 때문에 전통적인 프로세스 개선과 마찰이 생기게 된다.